#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
#include <set>
#include <climits>
#include <cassert>
#include <cctype>
using namespace std;

typedef long long ll;
typedef double dbl;
typedef long double ld;

#define mp make_pair
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
#define X first
#define Y second

const int maxn = 1000 * 100 + 1;
const dbl eps = (dbl)1e-6;

char f (int i) {
	if (i < 10)
		return i + '0';
	else
		return 'A' + i - 10;
}

//int a[2010][2010];

int main() {
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	
	/*while (true) {
		int n, x;
		ll d;
		scanf("%d%lld%d", &n, &d, &x);
		if (x == 1) {
			printf("0");
			continue;
		}

		for (int s = 0; s <= n; s++) {
			for (int t = 1; t <= n; t++) {
				dp[s][t] = sum[s;
			}
		}
	}*/
	int n, m, q;
	scanf("%d%d%d", &n, &m, &q);
	while (!((n == 0) && (m == 0) && (q == 0))) {
		getchar();
		if (q == 0) {
			if (n == 1) {
				for (int i = 0; i < m; i++)
					printf("0");
			}
			else {
				for (int i = 0; i < m; i++)
					printf("?");
			}
			puts("");
			scanf("%d%d%d", &n, &m, &q);
			continue;
		}
		vector <vector <int> > condsw(n, vector <int> (q + 1, '#')), condbulb(m, vector <int> (q + 1, '#'));
		for (int j = 0; j < n; j++) {
			condsw[j][0] = 0;
		}
		for (int j = 0; j < m; j++) {
			condbulb[j][0] = 0;
		}
		for (int i = 1; i <= q; i++) {
			for (int j = 0; j < n; j++) {
				char c = getchar();
				condsw[j][i] = (c - '0') ^ condsw[j][i - 1];

			}
			getchar();
			for (int j = 0; j < m; j++) {
				char c = getchar();
				condbulb[j][i] = c - '0';
			}
			getchar();
		}
		vector <char> ans (m, '?');
		for (int j = 0; j < m; j++) {
			for (int i = 0; i < n; i++) {
				bool eq = (condsw[i][0] == condbulb[j][0]);
				bool bad = false;
				for (int k = 1; k <= q; k++) {
					if ((condsw[i][k] == condbulb[j][k]) != eq)
						bad = true;
				}
				if (!bad) {
					if (ans[j] == '?')
						ans[j] = f(i);
					else 
						ans[j] = '!';
				}
			}
		}

		for (int i = 0; i < m; i++) {
			if (ans[i] == '!')
				printf("?");
			else
				printf("%c", ans[i]);
		}
		puts("");

		scanf("%d%d%d", &n, &m, &q);
	}
	return 0;
}